/*
 *    This program is free software; you can redistribute it and/or modify
 *    it under the terms of the GNU General Public License as published by
 *    the Free Software Foundation; either version 2 of the License, or
 *    (at your option) any later version.
 *
 *    This program is distributed in the hope that it will be useful,
 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *    GNU General Public License for more details.
 *
 *    2013 year
 *    Author: Esipenko Aleksey (Alexorleon)
 *    E-Mail: alexorleon@gmail.com
 */
#ifndef QRGEN_H
#define QRGEN_H

#include <QStringList>

#define ME_NAME "QRgen"
#define ME_VERSION "0.1"

class QRgen{
    Q_OBJECT

    QString workDir;
    int typeData;                                                   // для передачи типа данных в функцию GetNumberBits
    int lengthMessage;
    int version;
    QString binaryMessage;                                          // Основная переменная сообщения
    QString finishedBinaryMessage;                                  // окончательное сообщение
    QString message;
    QString tmpStr;                                                 // переменная для добавления нулей

public:
    QRgen();
    ~QRgen(){}
    // информация о библиотеки - версия, выполняемые задачи
    QStringList getInfo();
    // Основная функция выполняющая обработку данных внутри якоря.
    QString exec(const QString &data);
    // инициализация плагина
    // рабочий каталог
    bool init(const QString &wrkdir);
private:
    int GetAlphanumeric(const QChar &_chr);
    int GetNumberBits();
    int GetVersion();
    int EncodeNumeric();
    int EncodeAlphanumeric();
    int EncodeBinaryMode();
    int AddingZeros(const int &i);
    const QString addZero(const QString &str);
    int LengthCorrection();                                         // корректировка размера по таблице

    int ReedSolomon();                                              // создание кода коррекции ошибок Рида-Соломона
    int ChoiceMask(const int &n, const int &i, const int &j);
    int ImageGeneration(const int &w, const int &h);                // генерация изображения

signals:
    // сигнал отладочных сообщений.
    void sigLog(const QString & owner, int level, const QString & logtext);

};

#endif // QRGEN_H
